iT邦幫忙

2024 iThome 鐵人賽

DAY 11
1
Modern Web

Rive 的理論與實務系列 第 11

[Day 11] Rive Events

  • 分享至 

  • xImage
  •  

Rive Events 是另外一個前端與 Rive 溝通的方式,好吧嚴格講起來他不是前端帶參數給 Rive,而是反過來讓 Rive 可以 emit event & 參數出來給前端,通常這時候前端收到 event,會再回去帶參數給 Rive,改變 view 更新動畫這樣。

基本概念

Rive Events 本質上就是觀察者模式,所以設計師會在 Rive Editor 設定好 event 的名字,以及他們要傳出來的參數,前端這邊則是要註冊 event 與 eventHandler。傳出來的參數會是一個字串,通常會是 event 觸發時 Rive 的某個狀態,例如點擊的座標、State Machine Input 的數值、Rive Text 的值等等,不過也可以是某個寫死的字串。

基本語法

https://ithelp.ithome.com.tw/upload/images/20240909/20168679YjznF6QW6b.png
語法大概會長這樣,簡單來說要先註冊官方提供的這個 EventType.RiveEvent 這個事件,再從裡面拿出設計師自訂的 eventName & 設計師傳給你的參數 properties,再根據這兩個東西下去寫對應的 eventHandler。

EventType 是官方寫的 Enum,有興趣可以點進去追蹤看看,會更了解 Rive。我是覺得官方對於型別的設計都有點怪怪的,不是說寫得不好,但就是沒有很直覺哪邊卡卡的,可能是我對 TypeScript 還不夠熟吧。

注意事項

Rive Events 是一個非常好用的機制,能讓設計師反過來丟參數給前端是一個超級偉大的創舉,很多功能都因此而可以實作了,強烈建議多用用看。不過因為兩邊要約定好 event 的名稱 & 要傳過來的參數,所以跟之前一樣,還是會有命名的問題,這部分要多溝通一下,不再贅述。

另外如果 component 跟 composable 切的夠細的話,通常會遇到要跨檔案傳遞 event 的問題,例如在 useRive.ts 裡面註冊了 event,但想送到另一支 useXXX.ts 處理。就我們的經驗來說,這種需求通常只會越來越多,所以盡量不要想說省時間直接參數傳來傳去,還是乖乖寫一個 store 搭配 Custom Event 會比較好,否則資料流會越來越亂。

其實 Rive 本身的語法都不難,但很多設計模式上的問題,可能真的要實務上有遇過才會有一些想法,這也是我想寫這一系列文章的另一個原因。接下來幾天,會針對我們遇到的一些偏 Rive 前端架構設計問題,給出我們的實務上的建議。


上一篇
[Day 10] Rive Text
下一篇
[Day 12] 實務建議:盡量拆開程式碼
系列文
Rive 的理論與實務30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言